/*******************************************************************************
  * @file   scpi-def.h
  * @date   2020-07-13
  * @author
  * @author Simon Burkhardt
  * @brief  contains user settings and definitions for SCPI command implementation
  * @see    https://github.com/j123b567/scpi-parser/blob/master/examples/common/scpi-def.h
  * @see https://github.com/j123b567/scpi-parser/blob/master/examples/common/scpi-def.c
********************************************************************************
*/

/*-
 * BSD 2-Clause License
 *
 * Copyright (c) 2012-2018, Jan Breuer
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * * Redistributions of source code must retain the above copyright notice, this
 *   list of conditions and the following disclaimer.
 *
 * * Redistributions in binary form must reproduce the above copyright notice,
 *   this list of conditions and the following disclaimer in the documentation
 *   and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef __SCPI_DEF_H_
#define __SCPI_DEF_H_

#include "scpi/scpi.h"

#define SCPI_INPUT_BUFFER_LENGTH 256
#define SCPI_ERROR_QUEUE_SIZE 17

/**
 * IDN1 : Manufacturer (e.g. Keysight Technologies)
 * IDN2 : Model (e.g. 34465A)
 * IDN3 : Serial Number (e.g. BM420a2018)
 * IDN4 : Firmware Version (e.g. A.02.14-02.40-02.14-00.49-02-01)
 */
extern char _version_string[32];  // Firmware Version

#define SCPI_IDN1 "ETA SYSTEMS GMBH"
#define SCPI_IDN2 "LXI REMOTE DEMO"
#define SCPI_IDN3 _SERIAL_NUMBER
#define SCPI_IDN4 _version_string

extern const scpi_command_t scpi_commands[];
extern scpi_interface_t scpi_interface_serial;
extern char scpi_input_buffer_serial[];
extern scpi_error_t scpi_error_queue_data_serial[];
extern scpi_t scpi_context_serial;

extern scpi_interface_t scpi_interface_vxi;
extern char scpi_input_buffer_vxi[];
extern scpi_error_t scpi_error_queue_data_vxi[];
extern scpi_t scpi_context_vxi;

size_t SCPI_Write_Serial(scpi_t * context, const char * data, size_t len);
int SCPI_Error_Serial(scpi_t * context, int_fast16_t err);
scpi_result_t SCPI_Control_Serial(scpi_t * context, scpi_ctrl_name_t ctrl, scpi_reg_val_t val);
scpi_result_t SCPI_Reset_Serial(scpi_t * context);
scpi_result_t SCPI_Flush_Serial(scpi_t * context);

size_t SCPI_Write_TCP(scpi_t * context, const char * data, size_t len);
int SCPI_Error_TCP(scpi_t * context, int_fast16_t err);
scpi_result_t SCPI_Control_TCP(scpi_t * context, scpi_ctrl_name_t ctrl, scpi_reg_val_t val);
scpi_result_t SCPI_Reset_TCP(scpi_t * context);
scpi_result_t SCPI_Flush_TCP(scpi_t * context);

scpi_result_t SCPI_SystemCommTcpipControlQ(scpi_t * context);

#endif /* __SCPI_DEF_H_ */
